package com.atguigu.jinx.controller;

import com.atguigu.jinx.entity.vo.*;
import com.atguigu.jinx.service.IJobTaskService;
import com.atguigu.jinx.utils.PageUtils;
import com.atguigu.jinx.utils.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Description;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 接单大厅
 * </p>
 *
 * @author steve
 * @since 2025-08-07
 */
@RestController
@RequestMapping("/jinx/jobTask")
@RequiredArgsConstructor
public class JobTaskController {


    private final IJobTaskService jobTaskService;


    /**
     * 接单数
     */
    @Description("接单数的列表图")
    @GetMapping({"/taskNumPage"})
    public R taskNumPage() {
        TaskNumVO taskNumVO = jobTaskService.taskNumPage();
        return R.ok().put("data", taskNumVO);
    }

    /**
     * 任务招标的列表图
     */
    @Description("任务招标的列表图")
    @PostMapping({"/page"})
    public R taskListPage(@RequestBody JobQueryParamVO param) {
        PageUtils jobVOPage = jobTaskService.taskListPage(
                new Page<>(param.getPage(), param.getSize()), param);
        return R.ok().put("data", jobVOPage);
    }


    /**
     * 任务招标的详细图
     */
    @Description("任务招标的详细图")
    @GetMapping({"/details"})
    public R taskDetails(@RequestParam String jobId) {
        JobDetailVO jobDetailVO = jobTaskService.taskDetail(jobId);
        return R.ok().put("data", jobDetailVO);
    }

    /**
     * 任务招标的查询条件(下拉列表->工作岗位)
     */
    @Description("任务招标的查询条件工作岗位")
    @GetMapping({"/distinct-titles"})
    public R distinctTitles() {
        List<String> types = jobTaskService.getDistinctTitles();
        return R.ok().put("data", types);
    }

    /**
     * 任务招标的查询条件(下拉列表->城市)
     */
    @Description("任务招标的查询条件城市")
    @GetMapping({"/distinct-city"})
    public R distinctCity() {
        List<String> cities = jobTaskService.getDistinctCities();
        return R.ok().put("data", cities);
    }

    /**
     * 查看是否是会员
     * (1) 接单去判断会员 ，如果不是会员那么就给你返回一个让你变会员并且前端会引导到你去冲会员
     * (2)如果是会员，那么就更新接单状态,并且给你返回一个接单地址
     */
    @Description("查看是否是会员")
    @GetMapping("/checkMember")
    @Deprecated
    public R checkMember(@RequestParam String userId) {
        CheckMemberVO checkMemberVO = jobTaskService.checkMember(userId);
        return R.ok().put("data", checkMemberVO);
    }

    /**
     * 会员申请接单
     * (1) 接单去判断会员 ，如果不是会员那么就给你返回一个让你变会员并且前端会引导到你去冲会员
     * (2)如果是会员，那么就更新接单状态,并且给你返回一个接单地址
     */
    @Description("会员申请接单")
    @PostMapping("/memberApply")
    public R memberApply(@RequestBody @Validated ApplyFormVO applyFormVO) {
        jobTaskService.memberApply(applyFormVO);
        return R.ok().put("data", applyFormVO.getJobId());
    }

    /**
     * 获取全部的带工作地址的详情的页面
     * 通过JOB_ID重新刷新一下任务页面,但是这一次是会员带地址的
     */
    @Description("获取全部的带工作地址的详情的页面")
    @GetMapping({"/detailsVip"})
    public R taskDetailsVIP(@RequestParam String jobId) {
        JobDetailVipVO jobDetailVO = jobTaskService.taskJobsDetailVip(jobId);
        return R.ok().put("data", jobDetailVO);
    }


    /**
     * 销量展示
     */
    @Description("销量展示")
    @GetMapping({"/salesDisplay"})
    public R salesDisplay() {
        SalesNumVO vo = jobTaskService.salesDisplay();
        return R.ok().put("data", vo);
    }

}
